// 模版页面渲染配置文件
class customTemp {
    constructor(props) {
        const { _emitter } = props;
        this.emitter = _emitter;
        this._refs = {}; // 用来存储所有的ref
    }

    // 获取组件实例
    getCompByName(refName, _name) {
        return this._refs[refName][_name]
    }

    // 根据name 获取json中的数据
    getDataByName(jsonPageName, name) {
        if (!jsonPageName || !name) {
            !jsonPageName && console.error('方法：getDataByName调用，参数jsonPageName不能为空！方法调用失败！');
            !name && console.error('方法：getDataByName调用，参数name不能为空！方法调用失败！');
            return
        }
        const json = this.choiceTemp(jsonPageName);
        return this.findNodeByName(JSON.parse(json).data, name);
    }
    // 根据name 修改json中的数据
    setDataByName(name, value) {
        if (!value || !name) {
            !value && console.error('方法：setDataByName调用，参数value不能为空！方法调用失败！');
            !name && console.error('方法：setDataByName调用，参数name不能为空！方法调用失败！');
            return
        }
        this._refs[name].setJsonData(value)
    }
    // dom隐藏或显示
    toggleDomStatus(_refName, _Status) {
        if (!_refName) {
            throw new Error('请传入dom的名称～');
        }
        if (!_Status || _Status !== "show" && _Status !== "hide") {
            throw new Error('请输入hide或show');
        }
        this._refs[_refName][_Status]()
    }

    // 事件处理 单双击和自定义事件
    eventClick(arr = []) {
        this.processEvent(arr)
    }

    // 处理派发事件
    processEvent(EventList) {
        EventList.map((item, index) => {
            this.onTapEvent({ item })
            return null;
        })
    }

    // 跳转详情，加购，自定义事件
    onTapEvent(params) {
        const { item } = params
        switch (item.details) {
            case "goDetails":
                console.log('这是跳转')
                this.goTargetUrlFn(item);
                break;
            case "addBuy":
                console.log('这是加购')
                this.addBuyFn(item)
                break;
            case "custom":
                console.log('这是自定义')
                this.customFn(item)
                break;
            default: null
        }
    }

    // 跳转详情
    goTargetUrlFn(params) {
        const { href } = params;
        if (href.includes('//')) {
            my.call("navigateToOutside", {
                url: href
            })
        } else {
            my.navigateTo({
                url: href
            })
        }
    }
    // 加购
    addBuyFn(params) {
        const { addBuyId } = params;
        my.tb.showSku({
            itemId: addBuyId,
            complete: result => {
                // isAddBuy = false;
            }
        })
    }
    // 发送自定义事件
    customFn(params) {
        const { custom, customData } = params;
        console.log(`自定义方法 ${custom}`, ` 参数： ${customData}`);
        this.emitter.emit(custom, customData)
    }

    findNodeByName(data, name, newValue = null) {
        if (!!data) {
            let obj = null;
            if (isObjectFn(data)) {
                if (data.name1 === name) {
                    if (newValue) {
                        data = newValue;
                        return data;
                    }
                    return data;
                } else {
                    if (data.children && data.children.length) {
                        obj = this.findNodeByName(data.children, name, newValue || null);
                        if (!!obj) {
                            return obj;
                        }
                    }
                }
            } else {
                for (let i = 0; i < data.length; i++) {
                    if (data[i].name1 === name) {
                        if (newValue) {
                            data[i] = newValue;
                            return data[i];
                        }
                        return data[i];
                    } else {
                        if (data[i].children && data[i].children.length) {
                            obj = this.findNodeByName(data[i].children, name, newValue || null);
                            if (!!obj) {
                                return obj;
                            }
                        }
                    }
                }
                return obj;
            }
        }
    }
}



module.exports = exports.customTemp = customTemp;
